GtkThemingEngine: Add gtk_theming_engine_register_property().
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 4 Aug 2010 15:51:19 +0000 (17:51 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Sat, 4 Dec 2010 14:37:35 +0000 (15:37 +0100)
This function may be used for custom property registration from
theming engines. The property names will have the
-${engine-type-name}-${prop-name} format, the parser has been
modified to allow properties with '-' as the first char.

gtk/gtkcssprovider.c
gtk/gtkthemingengine.c
gtk/gtkthemingengine.h

index 2cb90442dbab2823c1adec1c813c420a74082c39..ed9ad4539c7488d258cfaffcc394bceb43fb3532 100644 (file)
@@ -622,6 +622,14 @@ gtk_css_provider_get_style (GtkStyleProvider *provider,
         {
           gchar *prop = key;
 
+          /* Properties starting with '-' may be both widget style properties
+           * or custom properties from the theming engine, so check whether
+           * the type is registered or not.
+           */
+          if (prop[0] == '-' &&
+              !gtk_style_set_lookup_property (prop, NULL, NULL))
+            continue;
+
           if (info->state == GTK_STATE_NORMAL)
             gtk_style_set_set_default (set, key, value);
           else
@@ -1423,18 +1431,7 @@ parse_rule (GtkCssProvider *css_provider,
 
       value_str = g_strstrip (scanner->value.v_identifier);
 
-      if (prop[0] == '-' &&
-          g_ascii_isupper (prop[1]))
-        {
-          GValue *val;
-
-          val = g_slice_new0 (GValue);
-          g_value_init (val, G_TYPE_STRING);
-          g_value_set_string (val, value_str);
-
-          g_hash_table_insert (priv->cur_properties, prop, val);
-        }
-      else if (gtk_style_set_lookup_property (prop, &prop_type, &parse_func))
+      if (gtk_style_set_lookup_property (prop, &prop_type, &parse_func))
         {
           GValue *val;
 
@@ -1464,6 +1461,17 @@ parse_rule (GtkCssProvider *css_provider,
               return G_TOKEN_IDENTIFIER;
             }
         }
+      else if (prop[0] == '-' &&
+               g_ascii_isupper (prop[1]))
+        {
+          GValue *val;
+
+          val = g_slice_new0 (GValue);
+          g_value_init (val, G_TYPE_STRING);
+          g_value_set_string (val, value_str);
+
+          g_hash_table_insert (priv->cur_properties, prop, val);
+        }
       else
         g_free (prop);
 
index 3d43b2f7ba0234b48704cad8726087616d0cc512..fa65ab645813319d6de880b679c55fb6f9aeea2a 100644 (file)
@@ -194,6 +194,25 @@ _gtk_theming_engine_set_context (GtkThemingEngine *engine,
   priv->context = context;
 }
 
+void
+gtk_theming_engine_register_property (GtkThemingEngine       *engine,
+                                      const gchar            *property_name,
+                                      GType                   type,
+                                      const GValue           *default_value,
+                                      GtkStylePropertyParser  parse_func)
+{
+  gchar *name;
+
+  g_return_if_fail (GTK_IS_THEMING_ENGINE (engine));
+  g_return_if_fail (property_name != NULL);
+  g_return_if_fail (type != G_TYPE_INVALID);
+  g_return_if_fail (default_value != NULL && G_IS_VALUE (default_value));
+
+  name = g_strdup_printf ("-%s-%s", G_OBJECT_TYPE_NAME (engine), property_name);
+  gtk_style_set_register_property (name, type, default_value, parse_func);
+  g_free (name);
+}
+
 void
 gtk_theming_engine_get_property (GtkThemingEngine *engine,
                                  const gchar      *property,
index 1191d5a2f04e08f376ba16fadf948b83745508fa..2e31a292bd61bc0ca3538435825f2b4bf5bbc7ec 100644 (file)
@@ -139,6 +139,12 @@ GType gtk_theming_engine_get_type (void) G_GNUC_CONST;
 void _gtk_theming_engine_set_context (GtkThemingEngine *engine,
                                       GtkStyleContext  *context);
 
+void gtk_theming_engine_register_property (GtkThemingEngine       *engine,
+                                           const gchar            *property_name,
+                                           GType                   type,
+                                           const GValue           *default_value,
+                                           GtkStylePropertyParser  parse_func);
+
 void gtk_theming_engine_get_property (GtkThemingEngine *engine,
                                       const gchar      *property,
                                       GtkStateType      state,